package com.springboot.file.util;

import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;

/**
 * 缓冲区工具类，用于在Java 8和Java 9+之间提供兼容性
 * 
 * 在Java 9中，ByteBuffer和CharBuffer的clear()、flip()等方法的返回类型从Buffer改为了各自的类型。
 * 当使用Java 9+编译但在Java 8运行时，会出现NoSuchMethodError，因为Java 8中不存在对应的方法签名。
 * 这个工具类通过显式转换为Buffer类型来避免这个问题。
 */
public class BufferUtil {
    
    /**
     * 私有构造函数，防止实例化
     */
    private BufferUtil() {
        // 工具类不应被实例化
    }
    
    /**
     * 清空ByteBuffer
     * 
     * @param buffer 要清空的ByteBuffer
     * @return 清空后的ByteBuffer
     */
    public static ByteBuffer clear(ByteBuffer buffer) {
        ((Buffer) buffer).clear();
        return buffer;
    }
    
    /**
     * 清空CharBuffer
     * 
     * @param buffer 要清空的CharBuffer
     * @return 清空后的CharBuffer
     */
    public static CharBuffer clear(CharBuffer buffer) {
        ((Buffer) buffer).clear();
        return buffer;
    }
    
    /**
     * 翻转ByteBuffer
     * 
     * @param buffer 要翻转的ByteBuffer
     * @return 翻转后的ByteBuffer
     */
    public static ByteBuffer flip(ByteBuffer buffer) {
        ((Buffer) buffer).flip();
        return buffer;
    }
    
    /**
     * 翻转CharBuffer
     * 
     * @param buffer 要翻转的CharBuffer
     * @return 翻转后的CharBuffer
     */
    public static CharBuffer flip(CharBuffer buffer) {
        ((Buffer) buffer).flip();
        return buffer;
    }
    
    /**
     * 设置ByteBuffer的位置
     * 
     * @param buffer 要设置的ByteBuffer
     * @param position 新位置
     * @return 设置后的ByteBuffer
     */
    public static ByteBuffer position(ByteBuffer buffer, int position) {
        ((Buffer) buffer).position(position);
        return buffer;
    }
    
    /**
     * 设置CharBuffer的位置
     * 
     * @param buffer 要设置的CharBuffer
     * @param position 新位置
     * @return 设置后的CharBuffer
     */
    public static CharBuffer position(CharBuffer buffer, int position) {
        ((Buffer) buffer).position(position);
        return buffer;
    }
    
    /**
     * 设置ByteBuffer的限制
     * 
     * @param buffer 要设置的ByteBuffer
     * @param limit 新限制
     * @return 设置后的ByteBuffer
     */
    public static ByteBuffer limit(ByteBuffer buffer, int limit) {
        ((Buffer) buffer).limit(limit);
        return buffer;
    }
    
    /**
     * 设置CharBuffer的限制
     * 
     * @param buffer 要设置的CharBuffer
     * @param limit 新限制
     * @return 设置后的CharBuffer
     */
    public static CharBuffer limit(CharBuffer buffer, int limit) {
        ((Buffer) buffer).limit(limit);
        return buffer;
    }
    
    /**
     * 重置ByteBuffer
     * 
     * @param buffer 要重置的ByteBuffer
     * @return 重置后的ByteBuffer
     */
    public static ByteBuffer reset(ByteBuffer buffer) {
        ((Buffer) buffer).reset();
        return buffer;
    }
    
    /**
     * 重置CharBuffer
     * 
     * @param buffer 要重置的CharBuffer
     * @return 重置后的CharBuffer
     */
    public static CharBuffer reset(CharBuffer buffer) {
        ((Buffer) buffer).reset();
        return buffer;
    }
    
    /**
     * 倒回ByteBuffer
     * 
     * @param buffer 要倒回的ByteBuffer
     * @return 倒回后的ByteBuffer
     */
    public static ByteBuffer rewind(ByteBuffer buffer) {
        ((Buffer) buffer).rewind();
        return buffer;
    }
    
    /**
     * 倒回CharBuffer
     * 
     * @param buffer 要倒回的CharBuffer
     * @return 倒回后的CharBuffer
     */
    public static CharBuffer rewind(CharBuffer buffer) {
        ((Buffer) buffer).rewind();
        return buffer;
    }
} 